Skip to content

Comments

Upgrade Spring Boot 2.6.3 → 3.3.13 (incremental migration)#349

Open
devin-ai-integration[bot] wants to merge 7 commits intomasterfrom
devin/1770752996-springboot-upgrade
Open

Upgrade Spring Boot 2.6.3 → 3.3.13 (incremental migration)#349
devin-ai-integration[bot] wants to merge 7 commits intomasterfrom
devin/1770752996-springboot-upgrade

Conversation

@devin-ai-integration
Copy link

@devin-ai-integration devin-ai-integration bot commented Feb 10, 2026

Upgrade Spring Boot 2.6.3 → 3.3.13 (incremental migration)

Summary

Incremental Spring Boot upgrade performed in 7 steps, with all 68 tests passing at each step:

  1. 2.6.3 → 2.7.18 — Pinned Lombok 1.18.30 for JDK 21 compat, aligned DGS/rest-assured
  2. 2.7.18 → 3.0.13 — Java 17 target, javax.*jakarta.*, Spring Security 6 migration, jjwt 0.12.x API migration
  3. 3.0.13 → 3.1.12 — DGS 7.6.0, rest-assured 5.3.2
  4. 3.1.12 → 3.2.12 — DGS 8.7.1, DataFetcherExceptionHandler.onExceptionhandleException (returns CompletableFuture)
  5. 3.2.12 → 3.3.7 — DGS 9.1.2, jjwt 0.12.6, joda-time 2.12.7, SQLite JDBC 3.46.1.0
  6. 3.3.7 → 3.3.13 — Fixes critical CVE-2025-22228 (spring-security-crypto auth bypass) and multiple high-severity Tomcat CVEs
  7. CI — GitHub Actions JDK 11 → 17

Key migrations:

  • Jakarta namespace: All javax.validation.* / javax.servlet.*jakarta.* across 16 files
  • Spring Security: Removed WebSecurityConfigurerAdapter, replaced with SecurityFilterChain bean; antMatchersrequestMatchers; authorizeRequestsauthorizeHttpRequests
  • jjwt 0.12.x: New builder API (setSubjectsubject, parserBuilderparser, parseClaimsJwsparseSignedClaims, etc.) + SHA-512 key derivation to meet minimum key size requirement
  • DGS GraphQL: DefaultPageInfo → DGS-generated PageInfo type with builder pattern; exception handler returns CompletableFuture
  • Gradle: 7.4 → 8.5

Updates since last revision

  • Bumped from 3.3.7 → 3.3.13 to address critical and high Snyk CVEs (CVE-2025-22228, CVE-2025-24813, CVE-2025-31650, CVE-2025-48988, CVE-2025-49124, and others)
  • Snyk CI check (security/snyk) still reports 1 failure (not a required check). Remaining CVEs (e.g. in tomcat-embed-core, spring-beans, spring-core) require Spring Boot 3.4.x, which is outside the 3.3.x upgrade target. These should be tracked as follow-up work.

Review & Testing Checklist for Human

  • JWT signing key derivation changed (DefaultJwtService.java): The secret is now hashed with SHA-512 before creating the HMAC key, instead of using raw bytes directly. This will invalidate all existing JWTs in any deployed environment. Verify this is acceptable, or plan a token rotation/migration strategy.
  • Security filter chain correctness (WebSecurityConfig.java): Verify the requestMatchers rules match the previous antMatchers behavior exactly — particularly the ordering of /articles/feed (authenticated) vs /articles/** (permitAll), and that GraphQL endpoints remain accessible.
  • GraphQL PageInfo field mapping (ArticleDatafetcher.java, CommentDatafetcher.java): The DGS-generated PageInfo uses hasPreviousPage/hasNextPage vs the old hasPrevious/hasNext. Verify downstream consumers (frontend) expect these field names.
  • Run the application end-to-end: Only ./gradlew test was run. Recommend starting the app locally and hitting a few REST + GraphQL endpoints to confirm runtime behavior.

Notes

devin-ai-integration bot and others added 6 commits February 10, 2026 19:57
- Spring Boot 2.6.3 -> 2.7.18
- Gradle 7.4 -> 8.5 (required for JDK 21 support)
- dependency-management plugin 1.0.11 -> 1.0.15
- MyBatis starter 2.2.2 -> 2.3.2
- DGS 4.9.21 -> 4.10.3
- jjwt 0.11.2 -> 0.11.5
- SQLite JDBC 3.36.0.3 -> 3.42.0.1
- rest-assured 4.5.1 -> 5.2.0
- Lombok 1.18.30 (explicit, for JDK 21 compatibility)

Co-Authored-By: Doris Tian <doristian23@gmail.com>
- Spring Boot 2.7.18 -> 3.0.13
- Java source/target 11 -> 17
- dependency-management plugin 1.0.15 -> 1.1.4
- DGS codegen plugin 5.0.6 -> 5.12.4
- DGS framework 4.10.3 -> 6.0.5 (platform BOM)
- MyBatis starter 2.3.2 -> 3.0.3
- jjwt 0.11.5 -> 0.12.3 (new builder API)
- Migrate javax.validation -> jakarta.validation
- Migrate javax.servlet -> jakarta.servlet
- Replace WebSecurityConfigurerAdapter with SecurityFilterChain bean
- Replace antMatchers with requestMatchers (Spring Security 6)
- Replace authorizeRequests with authorizeHttpRequests
- Update jjwt API: setSubject->subject, setExpiration->expiration, parserBuilder->parser, parseClaimsJws->parseSignedClaims
- Use SHA-512 digest for signing key to ensure minimum key size
- Fix GraphQL PageInfo type to use DGS-generated types
- Fix CustomizeExceptionHandler for HttpStatusCode parameter

Co-Authored-By: Doris Tian <doristian23@gmail.com>
- Spring Boot 3.0.13 -> 3.1.12
- DGS platform 6.0.5 -> 7.6.0
- MyBatis starter 3.0.3 -> 3.0.4
- rest-assured 5.2.0 -> 5.3.2

Co-Authored-By: Doris Tian <doristian23@gmail.com>
- Spring Boot 3.1.12 -> 3.2.12
- DGS platform 7.6.0 -> 8.7.1
- Update GraphQLCustomizeExceptionHandler for DGS 8.x API changes
  (onException -> handleException returning CompletableFuture)

Co-Authored-By: Doris Tian <doristian23@gmail.com>
- Spring Boot 3.2.12 -> 3.3.7
- dependency-management plugin 1.1.4 -> 1.1.6
- DGS platform 8.7.1 -> 9.1.2
- jjwt 0.12.3 -> 0.12.6
- joda-time 2.10.13 -> 2.12.7
- SQLite JDBC 3.42.0.1 -> 3.46.1.0

Co-Authored-By: Doris Tian <doristian23@gmail.com>
- JDK 11 -> JDK 17 (required for Spring Boot 3.x)

Co-Authored-By: Doris Tian <doristian23@gmail.com>
@devin-ai-integration
Copy link
Author

🤖 Devin AI Engineer

I'll be helping with this pull request! Here's what you should know:

✅ I will automatically:

  • Address comments on this PR. Add '(aside)' to your comment to have me ignore it.
  • Look at CI failures and help fix them

Note: I can only respond to comments from users who have write access to this repository.

⚙️ Control Options:

  • Disable automatic comment and CI monitoring

Copy link
Author

@devin-ai-integration devin-ai-integration bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no potential bugs to report.

View in Devin Review to see 6 additional findings.

Open in Devin Review

- Spring Boot 3.3.7 -> 3.3.13
- Fixes CVE-2025-22228 (CRITICAL): Authentication Bypass in spring-security-crypto
- Fixes CVE-2025-24813 (HIGH): Path Equivalence in tomcat-embed-core
- Fixes CVE-2025-31650 (HIGH): Improper Cleanup in tomcat-embed-core
- Fixes CVE-2025-48988 (HIGH): Resource allocation in tomcat-embed-core
- Fixes CVE-2025-49124 (HIGH): Untrusted Search Path in tomcat-embed-core
- Fixes CVE-2025-41234 (MEDIUM): HTTP Response Splitting in spring-web
- Fixes multiple other Tomcat and Spring Security CVEs

Co-Authored-By: Doris Tian <doristian23@gmail.com>
@devin-ai-integration devin-ai-integration bot changed the title Upgrade Spring Boot 2.6.3 → 3.3.7 (incremental migration) Upgrade Spring Boot 2.6.3 → 3.3.13 (incremental migration) Feb 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants